/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package exporting;

import java.io.FileOutputStream;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.jdom.Element;
import org.jdom.Document;

import java.util.ArrayList;
import java.util.Arrays;
import javax.swing.DefaultListModel;
import org.jdom.output.Format;
import org.jdom.output.XMLOutputter;

public class exportHauptXML {

    public static void exportHauptXML(String[] args) {
        exportHauptXML m = new exportHauptXML();
        DefaultListModel s = new DefaultListModel();


        String[] test = {"Ric","PPS","Groe","Boh","Lan"};
        String[] ff = {"PGM"};
        String[] ll = {"Ric","PPS","Groe","TESTETET","Lan"};
        String[] kl = {"U1","U2","U3","U4"};

        ArrayList<String> klehrer = new ArrayList<String>(Arrays.asList(test));
        ArrayList<String> fach = new ArrayList<String>(Arrays.asList(ff));
        ArrayList<String> lehrer  = new ArrayList<String>(Arrays.asList(ll));
        ArrayList<String> klassen  = new ArrayList<String>(Arrays.asList(kl));

        ArrayList<Object> wstundenFachListeH1 = new ArrayList<Object>();
        ArrayList<Object> wstundenFachListeH2 = new ArrayList<Object>();
        ArrayList<Object> wstundenKlassenListeH1 = new ArrayList<Object>();
        ArrayList<Object> wstundenKlassenListeH2 = new ArrayList<Object>();
        ArrayList<Object> stundenListeH1 = new ArrayList<Object>();
        ArrayList<Object> stundenListeH2 = new ArrayList<Object>();


        Document xml = m.schreibeXML(klehrer,lehrer,fach,klassen,
                wstundenFachListeH1,wstundenFachListeH2,
                wstundenKlassenListeH1,wstundenKlassenListeH2,
                stundenListeH1,stundenListeH2);
    
        m.schreibeDatei(xml);


    }

    /**
     * Diese Methode erstellt ein "org.jdom.Document" aus den jeweiligen Listen.
     * @param klasseLehrerListe ( Liste der Klassenlehrer )
     * @param lehrerListe ( Liste der Fachlehrer )
     * @param fachListe ( Liste der Faecher
     * @param klassenListe ( Liste der Klassen )
     * @param wstundenFachListeH1 ( Wochenstunden für die Fächer im ersten Halbjahr)
     * @param wstundenFachListeH2 ( Wochenstunden für die Fächer im zweiten Halbjahr)
     * @param wstundenKlassenListeH1 ( Wochenstunden für die Klassen im ersten Halbjahr)
     * @param wstundenKlassenListeH2 ( s.o. im Zweiten Halbjahr )
     * @param stundenListeH1 ( Liste für die Stunden die pro Fach und Klasse gegeben sind 1. Halbjahr)
     * @param stundenListeH2 ( s.o im zweiten Halbjahr)
     * @return Document mit den jeweiligen Werten.
     */
    public Document schreibeXML(ArrayList<String> klasseLehrerListe,
                    ArrayList<String> lehrerListe,
                    ArrayList<String> fachListe,
                    ArrayList<String> klassenListe,
                    ArrayList<Object> wstundenFachListeH1,
                    ArrayList<Object> wstundenFachListeH2,
                    ArrayList<Object> wstundenKlassenListeH1,
                    ArrayList<Object> wstundenKlassenListeH2,
                    ArrayList<Object> stundenListeH1,
                    ArrayList<Object> stundenListeH2){

        // Elemente konstruieren.
        Element SchulFach;
        Element SchulKlasse;
        Element FachLehrer;
        Element halbJahr1;
        Element halbJahr2;
        Element WochenstundenFachH1;
        Element WochenstundenFachH2;

        // Prüfen ob die wichtigsten Listen leer sind.
        if(fachListe.isEmpty() && klassenListe.isEmpty()){
            System.out.println("Keine Liste!");
            return null;
        }

        Document doc = new Document();
        // Hauptelement
        Element rootElement = new Element("root");
        //Klassenunterteilung


        // Werte hinzufügen.

        // --> Die Fächer werden durchgearbeitet.
        for(int i = 0 ; i < fachListe.size();i++){        
            SchulFach = new Element("FACH");
            WochenstundenFachH1 = new Element("WochenstundenFachH1");
            WochenstundenFachH2 = new Element("WochenstundenFachH2");
            if(fachListe.size() < i ){
                fachListe.set(i, "");
            }
            if(wstundenFachListeH1.size() <= i ){
                wstundenFachListeH1.add("");
            }
            if( wstundenFachListeH2.size() <= i){
                wstundenFachListeH2.add("");
            }
            
            SchulFach.setAttribute("FACH",fachListe.get(i));                       
            WochenstundenFachH1.setText(wstundenFachListeH1.get(i).toString());
            WochenstundenFachH2.setText(wstundenFachListeH2.get(i).toString());            

            // --> Die Klassen werden durchgearbeitet.
            for(int l = 0; l < klassenListe.size();l++){
                FachLehrer = new Element("LEHRER");
                halbJahr1 = new Element("HALBJAHR1");
                halbJahr2 = new Element("HALBJAHR2");
                SchulKlasse = new Element("KLASSE");


                if(wstundenKlassenListeH1.size() <= l ){
                    wstundenKlassenListeH1.add("");
                }
                if( wstundenKlassenListeH2.size() <= l){
                    wstundenKlassenListeH2.add("");
                }
                if(stundenListeH1.size() <= l ){
                    stundenListeH1.add("");
                }
                if( stundenListeH2.size() <= l){
                    stundenListeH2.add("");
                }


                FachLehrer.setText(lehrerListe.get(l));
                SchulKlasse.setAttribute("KlassenLehrer",klasseLehrerListe.get(l));
                SchulKlasse.setAttribute("KlassenName",klassenListe.get(l));
                halbJahr1.setAttribute("WochenstundenKlasse",wstundenKlassenListeH1.get(l).toString());
                halbJahr1.setAttribute("Stunden",stundenListeH1.get(l).toString());
                halbJahr2.setAttribute("WochenstundenKlasse",wstundenKlassenListeH2.get(l).toString());
                halbJahr2.setAttribute("Stunden", stundenListeH2.get(l).toString());


                // Klasse zur SchulFach hinzufügen.
                SchulFach.addContent(SchulKlasse);

                // Content zur Klasse hinzufügen.
                SchulKlasse.addContent(FachLehrer);
                SchulKlasse.addContent(halbJahr1);
                SchulKlasse.addContent(halbJahr2);
            }

            // Wochestunden per Fach im Halbjahr
            SchulFach.addContent(WochenstundenFachH1);
            SchulFach.addContent(WochenstundenFachH2);
            rootElement.addContent(SchulFach);
        }




        doc.setRootElement(rootElement);

        return doc;
    }

    private void schreibeDatei(Document xml) {
        Format form = Format.getPrettyFormat();

        form.setEncoding("iso-8859-1");

        // Erzeugung eines XMLOutputters dem wir gleich unser Format mitgeben
        XMLOutputter xmlOut = new XMLOutputter(form);
        try {
            // Schreiben der XML-Datei ins Filesystem
            xmlOut.output(xml, new FileOutputStream("src/daten/test.xml"));
        } catch (IOException ex) {
            Logger.getLogger(exportHauptXML.class.getName()).log(Level.SEVERE, null, ex);
        }
    }



}//writer